<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Creating a Simple JavaServer Faces Application - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level3"><a href="bnapk.html">What Is a JavaServer Faces Application?</a></p>
<p class="toc level3"><a href="bnapj.html">JavaServer Faces Technology Benefits</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">Creating a Simple JavaServer Faces Application</a></p>
<p class="toc level4"><a href="#gjacb">Developing the Managed Bean</a></p>
<p class="toc level4"><a href="#gjuwp">Creating the Web Page</a></p>
<p class="toc level4"><a href="#gjaeu">Mapping the <tt>FacesServlet</tt> Instance</a></p>
<p class="toc level4"><a href="#gjbnc">The Lifecycle of the <tt>hello</tt> Application</a></p>
<p class="toc level4"><a href="#gjboh">To Build, Package, Deploy, and Run the <tt>hello</tt> Application in NetBeans IDE</a></p>
<p class="toc level4"><a href="#glebr">To Build, Package, Deploy, and Run the <tt>hello</tt> Example Using Ant</a></p>
</div>
<p class="toc level3 tocsp"><a href="bnaqy.html">Further Information about JavaServer Faces Technology</a></p>
<p class="toc level2 tocsp"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="bnapj.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="bnaqy.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gjaam"></a><h2>Creating a Simple JavaServer Faces Application</h2>
<a name="indexterm-215"></a><p>JavaServer Faces technology provides an easy and user-friendly process for creating web applications.
Developing a simple JavaServer Faces application typically requires the following tasks:</p>


<ul><li><p>Developing managed beans</p>

</li>
<li><p>Creating web pages using component tags</p>

</li>
<li><p>Mapping the <tt>FacesServlet</tt> instance</p>

</li></ul>
<p>This section describes those tasks through the process of creating a simple JavaServer
Faces Facelets application.</p>

<p>The example is a Hello application that includes a managed bean and a
web page. When accessed by a client, the web page prints out
a <tt>Hello World</tt> message. The example application is located in the directory <tt></tt><i>tut-install</i><tt>/examples/web/hello</tt>. The
tasks involved in developing this application can be examined by looking at the application
components in detail.</p>



<a name="gjacb"></a><h3>Developing the Managed Bean</h3>
<a name="indexterm-216"></a><a name="indexterm-217"></a><p>As mentioned earlier in this chapter, a managed bean is a lightweight container-managed
object. Components in a page are associated with managed beans that provide application
logic. The example managed bean, <tt>Hello.java</tt>, contains the following code:</p>

<pre>package hello;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Hello {

    final String world = "Hello World!";

    public String getworld() {
        return world;
    }
}</pre><p>The example managed bean sets the value of the variable <tt>world</tt> with the
string <tt>"Hello World!"</tt>. The <tt>@ManagedBean</tt> annotation registers the managed bean as a resource with
the JavaServer Faces implementation. For more information on managed beans and annotations, see
<a href="bnatx.html">Chapter&nbsp;9, Developing with JavaServer Faces Technology</a>.</p>



<a name="gjuwp"></a><h3>Creating the Web Page</h3>
<a name="indexterm-218"></a><p>In a typical Facelets application, web pages are created in XHTML. The example
web page, <tt>beanhello.xhtml</tt>, is a simple XHTML page. It has the following content:</p>

<pre>&lt;html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    &lt;h:head>
        &lt;title>Facelets Hello World&lt;/title>
    &lt;/h:head>
    &lt;h:body>
        #{hello.world}
    &lt;/h:body>
&lt;/html></pre><p>A Facelets XHTML web page can also contain several other elements, which are
covered later in this tutorial.</p>

<p><a name="indexterm-219"></a><a name="indexterm-220"></a>The web page connects to the managed bean through the Expression Language (EL)
value expression <tt>#{hello.world}</tt>, which retrieves the value of the <tt>world</tt> property from the managed
bean <tt>Hello</tt>. Note the use of <tt>hello</tt> to reference the managed bean <tt>Hello</tt>.
If no name is specified in the <tt>@ManagedBean</tt> annotation, the managed bean is
always accessed with the first letter of the class name in lowercase.</p>

<p>For more information on using EL expressions, see <a href="gjddd.html">Chapter&nbsp;6, Expression Language</a>. For more information
about Facelets technology, see <a href="giepx.html">Chapter&nbsp;5, Introduction to Facelets</a>. For more information about the JavaServer Faces programming
model and building web pages using JavaServer Faces technology, see <a href="bnaqz.html">Chapter&nbsp;7, Using JavaServer Faces Technology in Web Pages</a>.</p>



<a name="gjaeu"></a><h3>Mapping the <tt>FacesServlet</tt> Instance</h3>
<a name="indexterm-221"></a><p>The final task requires mapping the <tt>FacesServlet</tt>, which is done through the web
deployment descriptor (<tt>web.xml</tt>). A typical mapping of <tt>FacesServlet</tt> is as follows:</p>

<pre>&lt;servlet>
    &lt;servlet-name>Faces Servlet&lt;/servlet-name>
    &lt;servlet-class>javax.faces.webapp.FacesServlet&lt;/servlet-class>
    &lt;load-on-startup>1&lt;/load-on-startup>
&lt;/servlet>
&lt;servlet-mapping>
    &lt;servlet-name>Faces Servlet&lt;/servlet-name>
    &lt;url-pattern>/faces/*&lt;/url-pattern>
&lt;/servlet-mapping></pre><p>The preceding file segment represents part of a typical JavaServer Faces web deployment
descriptor. The web deployment descriptor can also contain other content relevant to a
JavaServer Faces application configuration, but that information is not covered here.</p>

<p>Mapping the <tt>FacesServlet</tt> is automatically done for you if you are using an
IDE such as NetBeans IDE.</p>



<a name="gjbnc"></a><h3>The Lifecycle of the <tt>hello</tt> Application</h3>
<a name="indexterm-222"></a><a name="indexterm-223"></a><p>Every web application has a lifecycle. Common tasks, such as handling incoming requests,
decoding parameters, modifying and saving state, and rendering web pages to the browser,
are all performed during a web application lifecycle. Some web application frameworks hide
the details of the lifecycle from you, whereas others require you to manage
them manually.</p>

<p>By default, JavaServer Faces automatically handles most of the lifecycle actions for you.
However, it also exposes the various stages of the request lifecycle, so that
you can modify or perform different actions if your application requirements warrant it.</p>

<p>It is not necessary for the beginning user to understand the lifecycle of
a JavaServer Faces application, but the information can be useful for creating more
complex applications.</p>

<p>The lifecycle of a JavaServer Faces application starts and ends with the following
activity: The client makes a request for the web page, and the server
responds with the page. The lifecycle consists of two main phases: <b>execute</b>
and <b>render</b>.</p>

<p>During the execute phase, several actions can take place:</p>


<ul><li><p>The application view is built or restored.</p>

</li>
<li><p>The request parameter values are applied.</p>

</li>
<li><p>Conversions and validations are performed for component values.</p>

</li>
<li><p>Managed beans are updated with component values.</p>

</li>
<li><p>Application logic is invoked.</p>

</li></ul>
<p>For a first (initial) request, only the view is built. For subsequent (postback)
requests, some or all of the other actions can take place.</p>

<p>In the render phase, the requested view is rendered as a response
to the client. Rendering is typically the process of generating output, such as HTML
or XHTML, that can be read by the client, usually a browser.</p>

<p>The following short description of the example JavaServer Faces application passing through its
lifecycle summarizes the activity that takes place behind the scenes.</p>

<p>The <tt>hello</tt> example application goes through the following stages when it is deployed
on the GlassFish Server.</p>


<ol><li><p>When the <tt>hello</tt> application is built and deployed on the GlassFish Server, the application is in an uninitiated state.</p>

</li>
<li><p>When a client makes an initial request for the <tt>beanhello.xhtml</tt> web page, the <tt>hello</tt> Facelets application is compiled.</p>

</li>
<li><p>The compiled Facelets application is executed, and a new component tree is constructed for the <tt>hello</tt> application and is placed in a <tt>FacesContext</tt>.</p>

</li>
<li><p>The component tree is populated with the component and the managed bean property associated with it, represented by the EL expression <tt>hello.world</tt>.</p>

</li>
<li><p>A new view is built, based on the component tree.</p>

</li>
<li><p>The view is rendered to the requesting client as a response.</p>

</li>
<li><p>The component tree is destroyed automatically.</p>

</li>
<li><p>On subsequent (postback) requests, the component tree is rebuilt, and the saved state is applied.</p>

</li></ol>
<p>For more detailed information on the JavaServer Faces lifecycle, see the JavaServer Faces
Specification, Version 2.0.</p>



<a name="gjboh"></a><h3>To Build, Package, Deploy, and Run the <tt>hello</tt> Application in NetBeans IDE</h3><ol>
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>In the Open Project dialog box, navigate to:</b><pre><i>tut-install</i>/examples/web</pre></li>
<li><b>Select the <tt>hello</tt> folder.</b></li>
<li><b>Select the Open as Main Project check box.</b></li>
<li><b>Click Open Project.</b></li>
<li><b>In the Projects tab, right-click the <tt>hello</tt> project and select Run.</b><p>This step compiles, assembles, and deploys the application and then brings up a
web browser window displaying the following URL:</p><pre>http://localhost:8080/hello</pre><p>The output looks like this:</p><pre>Hello World!</pre></li></ol>

<a name="glebr"></a><h3>To Build, Package, Deploy, and Run the <tt>hello</tt> Example Using Ant</h3><ol>
<li><b>In a terminal window, go to:</b><pre><tt></tt><i>tut-install</i><tt>/examples/web/hello/</tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant</b></tt></pre><p>This target builds the WAR file and copies it to the <tt></tt><i>tut-install</i><tt>/examples/web/hello/dist/</tt>
directory.</p></li>
<li><b>Type <tt><b>ant deploy</b></tt>.</b></li>
<li><b>In a web browser, type the following URL:</b><pre><tt><b>http://localhost:8080/hello/</b></tt></pre><p>The output looks like this:</p><pre>Hello World!</pre></li></ol>
         </div>
         <div class="navigation">
             <a href="bnapj.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="bnaqy.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

